#-*- coding:utf-8 -*-
import xlrd

import os
from xml.etree.ElementTree import ElementTree

from deleteValues import delete_current_dir

# FILE_TYPE 类型的文件从 LANGUAGE_DATABASE 中遍历生成相关资源文件

# 资源数据库 excel
LANGUAGE_DATABASE = 'H2海外翻译资源整理20181213.xlsx'

# 数据库的excel文件的sheet 名称
SHEET_NAME = u'词条汇总表'

# 支持的文件名称
FILE_TYPE = ['strings.xml', 'strings_bt.xml', 'home_strings.xml', 'arrays.xml', 'string_arry.xml', 'timezones.xml',
             'countries.xml']

# 支持的文件中的节点类型
NEED_NODES = ['string', 'item', 'timezone', 'country']

# 已数据库的CHINESE_VALUE列数据作为匹配的基础数据
CHINESE_VALUE = 'values-zh-rCN'

# DIR_PRE = 'values-ar-rAE'
DIR_PRE = 'values-'


# 遍历生成翻译后的xml
def create_values():
    try:
        # 打开当前路径下的excel表格
        file_handler = xlrd.open_workbook(LANGUAGE_DATABASE)
        sheet = file_handler.sheet_by_name(SHEET_NAME)
        # 获取第一行的数据，即语言种类
        language_types = sheet.row_values(0)
        # 找到简体中文所在列
        chinese_col = language_types.index(CHINESE_VALUE)
        # 找到所有的简体中文数据，即简体中文所在列
        chinese_data = sheet.col_values(chinese_col)
        # 获取当前路径
        work_dir = os.getcwd()
        # 遍历当前路径，获得文件夹名称和文件名称
        for parent, dir_names, file_names in os.walk(work_dir):
            # 遍历指定的文件 如strings.xml
            for file_name in file_names:
                # 只遍历FILE_TYPE中的文件
                if file_name in FILE_TYPE:
                    # 获取资源文件的路径 D:\GlobalResManager\values\Misckey\values-zh-rCN\strings.xml
                    file_path = os.path.join(parent, file_name)
                    # 遍历excel中指定语言
                    for language in language_types:
                        # 过滤
                        if DIR_PRE in language:
                            # 获取该语言所在列
                            col_language = language_types.index(language)
                            # 根据该语言生成目录
                            language_dir_path = os.path.join(parent, language)
                            # 没有则创建该目录
                            if not os.path.exists(language_dir_path):
                                os.makedirs(language_dir_path)
                            # 在上面创建的语言目录基础上生成xml资源文件的路径
                            type_path = os.path.join(language_dir_path, file_name)
                            # 根据资源文件生成XML tree
                            tree = ElementTree()
                            tree.parse(file_path)
                            root = tree.getroot()
                            # 遍历指定的节点
                            for need_node in NEED_NODES:
                                # 找到该节点在XML中对应的位置，并修改Value
                                for name in root.iter(need_node):
                                    # 找到已翻译的中文字符串所在行
                                    row = 0
                                    # 特殊处理 转小写后再移除前后空格
                                    excel_value = ''
                                    # 寻找可用的value
                                    for tmp_exist_data in chinese_data:
                                        if tmp_exist_data is not None and name.text is not None:
                                            if tmp_exist_data.lower().strip() == name.text.lower().strip():
                                                # 相等则修改节点内容
                                                excel_value = sheet.cell(row, col_language).value
                                                if excel_value.strip():
                                                    break
                                        row += 1
                                    # 如果value不为空，则赋值
                                    if excel_value.strip():
                                        name.text = excel_value
                            # 保存XML
                            tree.write(type_path, 'UTF-8')
    except Exception as e:
        print(e.message)


# 主函数
if __name__ == "__main__":
    delete_current_dir()
    create_values()
